function [A, SA, b, c, ma, art, indices] = simplexParse(nomA)
%                     SIMPLEXPARSE
% Toma el nombre de un archivo en cierto formato y lo convierte a las
% matrices y vectores que necesita el simplexCore.
% 
% usage:  [A, SA, b, c] = simplexParse(nomA)
%      donde:
%
%       A := matriz que contiene las restricciones del problema
%      SA := matriz que contiene los vectores de las holguras 
%       b := vector del LADO DERECHO de las restricciones
%       c := vector de costOs.
%    nomA := nombre del archivo. El archivo debe estar guardado en 
%            la carpeta ../TestFiles
%     min := booleano que indica c?mo
%     art := vector de indices de las columnas de [A SA] que corresponden
%            a variables artificiales. Si es 0, es que no hay.
% indices := vector que indica 
%
%                                   - Marcela Maldonado Figueroa -
%                                     - Pedro Orozco del Pino -
%                                    - Jose Alonso Solis Lemus -
%
nombre = strcat('../TestFiles/', nomA);
fi = fopen(nombre, 'r');

linea = fgetl(fi);
flag = ftell(fi); 
A = []; b = [];
SA = []; c = [];
A_aux = []; leqs = [];
m = 0; indices = [];
n = 1;
while ~feof(fi)
    if ~strcmp(';', linea(1))
        tipo = char(regexp(linea, '\w*[{Oa}{Oi}R]\w*', 'match'));
        switch tipo
            case {'Oi', 'Oa'}
                % es una funcion objetivo
                ma = strcmp(linea(3), 'a');
                [coefs, indx] = simplexLineParse(linea);
                c = (coefs.*(-1)^ma)';
                n = length(indx);
                indices = indx;
            case 'R'
                % es una restriccion
                
                m = m + 1;
               
                [coefs, indx, leq] = simplexLineParse(linea);
                A_aux = zeros(1,n);
                
                nc = length(coefs) - 1;
                
                A_aux(indx(1:nc)) = coefs(1:nc);
               
                A = [A;A_aux];
                leqs = [leqs;leq];
                b = [b;coefs(nc+1)];
        end
        linea = fgetl(fi);
    else 
        
      linea = fgetl(fi);  
        
    end
end

% Generamos SA a la "algoritmos"
I = eye(m);
totalVar = 2*length(find(leqs==0)) + length(find(leqs~=0));


SA=[]; S=[];Ar=[];
indices = []; inS=[]; inA=[];

for i=1:length(leqs)
    switch leqs(i)
        case 1
            S = [S I(:,i)];
            
        case 0
            S = [S (-1)*I(:,i)];
            Ar = [Ar I(:,i)];
        case 2
            Ar = [Ar I(:,i)];
    end
end

[rS, cA] = size(Ar);
[rS, cS] = size(S);

inS = (1:cS)+n;
inA = (1:cA)+n+length(inS);

if cA < m
    testS = sum(S);
    jS = [find(testS<0) find(testS>0)];
    S = S(:,jS);
    inS = inS(jS);
end


SA = [S Ar];
indices = [(1:n) inS inA];

art = inA;
costoscero = zeros((cS+cA),1);
c = [c;costoscero];
        
        
        
        
        
        
                
            
        